/******************************************************************************* 
  Copyright (C), 1988-2020, zeno Tech. Co., Ltd.
  Description:  MD模块总头文件
  Function List:
            
*******************************************************************************/
#ifndef MD_ALG_H 
#define MD_ALG_H  

#ifdef __cplusplus
extern "C" {
#endif

/*=============================================================================
                                 Includes                                  
==============================================================================*/

/*=============================================================================
                               Macro Definition
==============================================================================*/
                        
/*=============================================================================
                        Local Structures and Typedef 
==============================================================================*/

/* 内存操作数据 */
typedef struct
{
    int width;                             /* 图片宽度 */
    int height;                            /* 图片高度 */
    int stride;                            /* 图片占用跨距 */
    unsigned int phy;                      /* 物理地址 */
    void *pVir;                            /* 虚拟地址 */
}MD_mem_t;

/* 初始化参数 */
typedef struct
{
    int width;                                      /* 图片宽度 */
    int height;                                     /* 图片高度 */
    int stride;                                     /* 图片占用跨距 */
    int memMode;                                    /* 内存操作方式 */
    int (*memAlloc)(MD_mem_t *pMem);                /* 内存申请接口 */
    int (*memCopy)(MD_mem_t *pDst, MD_mem_t *pSrc); /* 内存拷贝接口 */
    int (*memFree)(MD_mem_t *pMem);                 /* 内存释放接口 */
}MD_init_t; 

/*=============================================================================
                             extern  Variables                                  
==============================================================================*/


/*=============================================================================
                             Function Definition                                  
==============================================================================*/ 
											
/*******************************************************************************
  Function:     MD_AlgInit
  Description:  动检算法层初始化
  Input:        - pInitParam: 初始化参数
  Output:       无
  Return:       无
  Others:       无
*******************************************************************************/
void *MD_AlgInit(MD_init_t *pInitParam);

/*******************************************************************************
  Function:     MD_AlgDeInit
  Description:  注销动检算法
  Input:        - hMotion: 动检句柄
  Output:       无
  Return:       无
  Others:       无
*******************************************************************************/
int MD_AlgDeInit(void *hMotion);

/*******************************************************************************
  Function:     MD_AlgSetParam
  Description:  设置动检参数
  Input:        - hMotion: 动检句柄
                - pMotionParam: 动检参数
  Output:       无
  Return:       无
  Others:       无
*******************************************************************************/
void MD_AlgSetParam(void *hMotion, VideoDetectMotionParam *pMotionParam);
								 
/*******************************************************************************
  Function:     MD_AlgGetResult
  Description:  执行动检算法
  Input:        - hMotion: 动检句柄
                - pMotionRsult: 动检结果
                - pYdataInfo:y数据结构体指针
  Output:       无
  Return:       1: 有动检
                0: 无动检 
  Others:       无
*******************************************************************************/
int MD_AlgGetResult(void *hMotion, 
					VideoDetectMotionResult *pMotionRsult,
					MD_mem_t *pDataInfo);

#ifdef __cplusplus
}
#endif
#endif // MD_ALG_H 